package com.bitejiuyeke.job_publish.service;

import com.bitejiuyeke.job_publish.common.PageResult;
import com.bitejiuyeke.job_publish.model.User;
import org.springframework.web.multipart.MultipartFile;

public interface IUserService {

    /**
     * 新增用户
     *
     * @param user
     */
    void create(User user);

    /**
     * 根据用户Id查询
     * @param id 用户Id
     * @return User
     */
    User selectById (Long id);

    /**
     * 根据电话号码查询
     * @param phoneNum 电话号码
     * @return User
     */
    User selectByPhoneNum(String phoneNum);

    /**
     * 根据电子邮箱市教育局
     * @param email 电子邮箱
     * @return User
     */
    User selectByEmail(String email);

    /**
     * 根据姓名查询
     * @param name 姓名
     * @return User
     */
    User selectByName(String name);

    /**
     * 用户使用电话号码登录
     * @param phoneNum 电话号码
     * @param password 密码
     * @return
     */
    User loginByPhoneNum(String phoneNum, String password);

    /**
     * 用户使用电子邮箱登录
     * @param email 电子邮箱
     * @param password 密码
     * @return
     */
    User loginByEmail(String email, String password);

    /**
     * 修改用户密码
     * @param id 用户Id
     * @param newPassword 新密码
     * @param oldPassword 老密码
     */
    void modifyPassword (Long id, String newPassword, String oldPassword);

    /**
     * 修改用户信息
     * @param user 要修改的用户对象<br/>
     *             这里只修改用户的：院系、姓名、学号、性别、入学时间、身份、标签、隐私状态、个人简介
     */
    void modifyInfo(User user);

    /**
     * 修改用户隐私状态
     * @param userId 用户Id
     * @param privateState 状态码 <br/> 0 隐私 <br/> 1 公开
     */
    void modifyPrivateState (Long userId, Byte privateState);
    /**
     * 修改用户的电话号码
     * @param phoneNum 电话号码
     * @param verificationCode 验证码
     */
    void modifyPhoneNum (Long id, String phoneNum, String verificationCode);

    /**
     * 修改用户的电子邮箱
     * @param email 电子邮箱
     * @param verificationCode 验证码
     */
    void modifyEmail (Long id, String email, String verificationCode);

    /**
     * 上传头像
     * @param id 用户Id
     * @param avatar 头像图片
     */
    User uploadAvatar (Long id, MultipartFile avatar);

    /**
     * 删除用户头像
     * @param id
     * @return
     */
    User deleteAvatar (Long id);

    /**
     * 上传头像
     * @param id 用户Id
     * @param resume 简历文件
     */
    User uploadResume (Long id, MultipartFile resume);

    /**
     * 删除用户简历
     * @param id
     * @return
     */
    User deleteResume (Long id);

    /**
     * 增加收藏数
     * @param count
     */
    void addFavoriteCount (Long id, Integer count);

    /**
     * 减少收藏数
     * @param count
     */
    void minusFavoriteCount (Long id, Integer count);

    /**
     * 增加投递简历数
     * @param count
     */
    void addSendCount (Long id, Integer count);

    /**
     * 用户总数
     * @param record 查询条件
     * @return
     */
    int totalCount (User record);

    /**
     * 用户分页列表
     * @param record 查询条件
     * @return
     */
    PageResult<User> selectByPage(User record);

}
